package com.nidu.demo.permission.api;

import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.nidu.demo.menu.dto.MenuTreeCO;
import com.nidu.demo.role.dto.RoleMenuAssignCmd;
import com.nidu.demo.user.dto.UserPermissionInfoCO;
import com.nidu.demo.user.dto.UserRoleAssignCmd;

public interface SysPermissionService {

    /**
     * 获取用户的权限信息
     * @param userId
     * @return
     */
    SingleResponse<UserPermissionInfoCO> getPermissionInfo(Long userId);

    /**
     * 获取用户的菜单信息
     * @param userId
     * @return
     */
    MultiResponse<MenuTreeCO> getMenuInfo(Long userId);

    /**
     * 判断是否有权限，任一一个即可
     *
     * @param userId      用户编号
     * @param permissions 权限
     * @return 是否
     */
    SingleResponse<Boolean> hasAnyPermissions(Long userId, String... permissions);

    /**
     * 判断是否有角色，任一一个即可
     *
     * @param roles 角色数组
     * @return 是否
     */
    SingleResponse<Boolean> hasAnyRoles(Long userId, String... roles);


    /**
     * 查询用户分配的角色ID列表
     * @param userId
     * @return
     */
    MultiResponse<Long> getUserRoles(Long userId);

    /**
     * 分配用户角色
     * @param cmd 角色分配命令
     * @return 操作结果
     */
    Response assignUserRole(UserRoleAssignCmd cmd);

    /**
     * 查询角色分配的菜单ID列表
     * @param roleId
     * @return
     */
    MultiResponse<Long> getRoleMenus(Long roleId);

    /**
     * 分配菜单权限
     *
     * @param cmd 菜单分配命令
     * @return 操作结果
     */
    Response assignRoleMenu(RoleMenuAssignCmd cmd);

}
